﻿#!/bin/bash
set -e 

##############################################################################
# 配置参数
##############################################################################
PACKAGE_NAME="archibate-debughpp"
VERSION="0.99"
MAINTAINER="etcix<1690544550@qq.com> | eeppee_admin at gitee"
DESCRIPTION="C++ 头文件库 debug.hpp（来自 archibate）"
HOMEPAGE="https://github.com/archibate"
INSTALL_DIR="/usr/include/archibate-debughpp"  # 对应新包名的安装路径
DEBUG_HPP_PATH="./debug.hpp"

##############################################################################
# 1. 检查依赖工具（新增 file 命令检查）
##############################################################################
echo "=== 检查打包依赖工具 ==="
REQUIRED_TOOLS="dpkg-deb mkdir cp chmod rm find file iconv"  # 新增必要工具
for tool in $REQUIRED_TOOLS; do
    if ! command -v $tool &> /dev/null; then
        echo "错误：缺少必要工具 $tool，请先安装（例如：sudo apt install dpkg-dev file）"
        exit 1
    fi
done

if [ ! -f "$DEBUG_HPP_PATH" ]; then
    echo "错误：未找到 $DEBUG_HPP_PATH，请确保文件在当前目录"
    exit 1
fi

##############################################################################
# 2. 创建临时打包目录结构
##############################################################################
echo -e "\n=== 创建临时打包目录 ==="
DEB_BUILD_DIR="./deb-build"
rm -rf "$DEB_BUILD_DIR"
mkdir -p "$DEB_BUILD_DIR/$INSTALL_DIR"
mkdir -p "$DEB_BUILD_DIR/DEBIAN"

##############################################################################
# 3. 复制头文件并修复编码检测（核心修复部分）
##############################################################################
echo "=== 复制 debug.hpp 到打包目录 ==="
cp "$DEBUG_HPP_PATH" "$DEB_BUILD_DIR/$INSTALL_DIR/"
TARGET_FILE="$DEB_BUILD_DIR/$INSTALL_DIR/debug.hpp"

# 修复：兼容不同版本的 file 命令，用更通用的方式检测 UTF-8 编码
echo "=== 检查文件编码 ==="
# 方法1：尝试 file --mime-encoding（多数系统支持）
if file --mime-encoding "$TARGET_FILE" 2>/dev/null | grep -q "utf-8"; then
    echo "文件已为 UTF-8 编码，无需转换"
# 方法2：如果方法1失败，用 grep 检测 UTF-8 BOM 或特征
elif grep -qP '\P{ASCII}' "$TARGET_FILE" && ! grep -qP '[^\x00-\x7F]' "$TARGET_FILE"; then
    echo "文件已为 UTF-8 编码，无需转换"
else
    echo "警告：文件非 UTF-8 编码，尝试自动转换..."
    # 先尝试常见编码（GBK/GB2312/UTF-16）转换，避免单一编码失败
    for encoding in GBK GB2312 UTF-16; do
        if iconv -f "$encoding" -t UTF-8 "$TARGET_FILE" -o "$TARGET_FILE.tmp" 2>/dev/null; then
            mv "$TARGET_FILE.tmp" "$TARGET_FILE"
            echo "成功转换编码为 UTF-8（原编码：$encoding）"
            break
        fi
    done
    # 如果所有编码都失败，提示手动处理
    if [ -f "$TARGET_FILE.tmp" ]; then
        rm -f "$TARGET_FILE.tmp"
    else
        echo "错误：无法自动转换编码，请手动将 $TARGET_FILE 转换为 UTF-8 后重试"
        exit 1
    fi
fi

##############################################################################
# 4. 生成 Debian 控制文件（更新包名相关信息）
##############################################################################
echo -e "\n=== 生成 Debian 控制文件 ==="
CONTROL_FILE="$DEB_BUILD_DIR/DEBIAN/control"
cat > "$CONTROL_FILE" << EOF
Package: $PACKAGE_NAME
Version: $VERSION
Section: header only libs
Priority: optional
Architecture: all
Depends: g++ (>= 7.0), libstdc++6 (>= 7.0)
Maintainer: $MAINTAINER
Homepage: $HOMEPAGE
Description: $DESCRIPTION
  该包包含 archibate 开发的 debug.hpp 头文件库，用于 C++ 项目的调试输出。
  安装后可通过 #include <$PACKAGE_NAME/debug.hpp> 引用。
EOF
chmod 644 "$CONTROL_FILE"

##############################################################################
# 5. 生成安装后提示脚本（修正引用路径）
##############################################################################
echo "=== 生成安装后提示脚本 ==="
POSTINST_FILE="$DEB_BUILD_DIR/DEBIAN/postinst"
cat > "$POSTINST_FILE" << EOF
#!/bin/bash
echo "=============================================="
echo "$PACKAGE_NAME ($VERSION) 安装完成！"
echo "头文件路径：$INSTALL_DIR/debug.hpp"
echo "使用方法：在 C++ 代码中添加 #include <$PACKAGE_NAME/debug.hpp>"
echo "=============================================="
EOF
chmod 755 "$POSTINST_FILE"

##############################################################################
# 6. 设置文件权限
##############################################################################
echo "=== 设置文件权限 ==="
find "$DEB_BUILD_DIR/$INSTALL_DIR" -type f -exec chmod 644 {} \;
find "$DEB_BUILD_DIR/$INSTALL_DIR" -type d -exec chmod 755 {} \;

##############################################################################
# 7. 构建 .deb 包
##############################################################################
echo -e "\n=== 构建 Debian 包 ==="
DEB_PACKAGE="${PACKAGE_NAME}_${VERSION}_all.deb"
dpkg-deb --build --root-owner-group "$DEB_BUILD_DIR" "$DEB_PACKAGE"

if [ -f "$DEB_PACKAGE" ]; then
    echo "✅ 打包成功！生成文件：$DEB_PACKAGE"
else
    echo "❌ 打包失败！"
    exit 1
fi

##############################################################################
# 8. 清理临时文件
##############################################################################
echo -e "\n=== 清理临时目录 ==="
rm -rf "$DEB_BUILD_DIR"
echo "✅ 临时文件已清理"

##############################################################################
# 9. 显示使用说明（修正示例路径）
##############################################################################
echo -e "\n=============================================="
echo "📦 $PACKAGE_NAME 打包完成！"
echo " "
echo "安装命令：sudo dpkg -i $DEB_PACKAGE"
echo "卸载命令：sudo dpkg -r $PACKAGE_NAME"
echo "查看包信息：dpkg -l $PACKAGE_NAME"
echo " "
echo "使用示例（C++ 代码）："
echo "  #include <$PACKAGE_NAME/debug.hpp>"
echo "  int main() {"
echo "      int a = 1; debug(), a;"
echo "      return 0;"
echo "  }"
echo "=============================================="
